def greeting():
    message = "hello"
    value = 20

    def inner():
        # message是内部函数引用外部nonlocal的变量
        print(message)
        print(value)

    message = "second"
    return inner


# greeting()执行完后message变量会被回收，但内部函数inner()引用了外部函数变量
f = greeting()
# f.__closure__是一个元组，会复制引用外部函数变量的值到该元组中，这就是函数闭包
# print(f.__closure__[0])
f()
